﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace PPE_gestion_commercial
{
    public partial class ModifProduit : Form
    {
        // Définition des variables pour la connexion avec SQL Server
        SqlConnection connex;
        SqlCommand cmd;
        SqlDataReader dr;
        SqlDataReader dr2;
        SqlDataReader dr3;
        SqlDataReader dr4;
        int idProduit;
        private string strconn = "server=78.241.116.47;Network Library=DBMSSOCN; database=gestion; User Id=Gestion; Password=gestion";

        public int id;

        public ModifProduit()
        {
            InitializeComponent();
        }

        //Fontion pour vider les données contenues dans les textBoxs
        private void vider()
        {
            nomProdBox.Clear();
            descProdBox.Clear();
            prixProdBox.Clear();
            quantProdBox.Clear();
        }

        // Fonction qui s'exécute lors du lancement du Form
        private void Form6_Load(object sender, EventArgs e)
        {
            // Définition de la DataGridView : Nombre et Noms des colonnes
            dataGridView1.ColumnCount = 2;
            dataGridView1.Columns[0].Name = "Nom du Produit";
            dataGridView1.Columns[1].Name = "id produit";
            dataGridView1.Columns[1].Visible = false;

            // Connexion à la base
            connex = new SqlConnection();
            connex.ConnectionString = strconn;
            connex.Open();

            // On récupère les noms et categorie des produits qui se trouvent dans la BDD
            string sql = "Select NomProduit, IdProduit from produit";
            cmd = new SqlCommand(sql, connex);
            dr = cmd.ExecuteReader();
            int j = 0;

            // On remplit par une boucle la datagridview selon les colonnes
            while (dr.Read())
            {
                dataGridView1.RowCount = j + 1;
                for (int i = 0; i < dr.FieldCount; i++)
                {
                    dataGridView1.Rows[j].Cells[i].Value = dr[i].ToString();
                }
                j++;
            }

            // Fermeture du curseur
            dr.Close();
            List<categorie> listeCategorie = new List<categorie>();
            int k = 1;

            string sqlCat = "SELECT idType,nomType FROM typeProduit order by idType";
            cmd = new SqlCommand(sqlCat, connex);
            dr3 = cmd.ExecuteReader();
            while (dr3.Read())
            {
                categorie cat = new categorie();
                cat.id = Convert.ToInt32(dr3[0]);
                cat.cat = dr3[1].ToString();
                listeCategorie.Add(cat);
            }
            dr3.Close();
            // Fermeture de la connexion à la BDD
            connex.Close();

            foreach (categorie c in listeCategorie)
            {
                catComboBox.Items.Add(c.cat);
                k++;
            }
        }

        // Fonction quand on clique ou doubleclique sur un élément de la DatagridView
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            //Définition des variables
            
            int colonne = e.ColumnIndex;
            int ligne = e.RowIndex;
            string selection;
            string type="";

            string nom = "";
            string cat = "";
            string desc = "";
            string prix = "";
            string quant = "";

            // Appel de la fonction qui vide les textBoxs
            vider();

            // On récupère la valeur de la case cliqué
            selection = this.dataGridView1.Rows[ligne].Cells[1].Value.ToString();

            // Connexion à la base
            connex = new SqlConnection();
            connex.ConnectionString = strconn;
            connex.Open();

            // On récupère les clients dans la BDD qui ont pour valeur, de type NomProduit ou CategorieP, la valeur cliqué
            string sql2 = "Select * from produit where IdProduit = " + selection;
            cmd = new SqlCommand(sql2, connex);
            dr2 = cmd.ExecuteReader();

            // On remplit les variables avec une boucle
            while (dr2.Read())
            {
                idProduit = Convert.ToInt16(dr2[0].ToString());
                nom = dr2[1].ToString();
                cat = dr2[2].ToString();
                desc = dr2[3].ToString();
                prix = dr2[4].ToString();
                quant = dr2[5].ToString();
            }

            // Fermeture du curseur
            dr2.Close();
            // Fermeture de la connexion à la BDD
            connex.Close();

            connex.Open();
            string sql3 = "Select nomType from typeProduit where nomType = '" + cat + "'";
            cmd = new SqlCommand(sql3, connex);
            dr4 = cmd.ExecuteReader();

            while (dr4.Read())
            {
                catComboBox.SelectedItem = dr4[0].ToString();
            }

            // Fermeture de la connexion à la BDD
            connex.Close();

            // On remplit les textBoxs avec les variables pré-remplies
            nomProdBox.Text = nom;
            descProdBox.Text = desc;
            prixProdBox.Text = prix;
            quantProdBox.Text = quant;
        }

        // Fonction qui s'exécute lorqu'on clique sur le bouton Modifier
        private void button1_Click(object sender, EventArgs e)
        {
            // Connexion à la base
            connex = new SqlConnection();
            connex.ConnectionString = strconn;
            connex.Open();

            // Requête qui va modifier dans la BDD
            string sql3 = "UPDATE produit SET NomProduit='" + nomProdBox.Text.Replace("'", "''") + "', CategorieP='" + catComboBox.SelectedItem.ToString() +
                "', DescriptionP='" + descProdBox.Text.Replace("'", "''") + "', PrixP=" + prixProdBox.Text + ", QuantiteP=" + quantProdBox.Text + " WHERE IdProduit=" + idProduit;
            cmd = new SqlCommand(sql3, connex);
            dr3 = cmd.ExecuteReader();

            // Fermeture du curseur
            dr3.Close();
            // Fermeture de la connexion à la base
            connex.Close();

            MessageBox.Show("Vos modifications ont été faites!");
        }

        private void button2_Click(object sender, EventArgs e)
        {

        }

        private void supprimerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SuppProduit f8 = new SuppProduit("");
            f8.Show();
            this.Close();
        }
        private void supprimerToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            SuppClient f7 = new SuppClient("");
            f7.Show();
            this.Close();
        }

        private void modifierToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            ModifClient f5 = new ModifClient();
            f5.Show();
            this.Close();
        }

        private void modifierToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ModifProduit f6 = new ModifProduit();
            f6.Show();
            this.Close();        
        }
        private void ajouterToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AjoutProduit f4 = new AjoutProduit();
            f4.Show();
            this.Close();
        }

        private void ajouterToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            AjoutClient f2 = new AjoutClient();
            f2.Show();
            this.Close();
        }

        private void ajoutCatButton_Click(object sender, EventArgs e)
        {
            AjoutSuppCategorie f3 = new AjoutSuppCategorie("modif");
            f3.ShowDialog();
            this.Close();
        }

        private void button2_Click_1(object sender, EventArgs e)
        {
            this.Refresh();
        }

    }
}
